package com.sqlcheck.service.impl;

import com.sqlcheck.common.enums.UserRole;
import com.sqlcheck.entity.User;
import com.sqlcheck.repository.UserRepository;
import com.sqlcheck.service.UserContextService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * 用户上下文服务实现
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class UserContextServiceImpl implements UserContextService {

    private final UserRepository userRepository;

    @Override
    public User getCurrentUser(Long userId) {
        if (userId == null) {
            throw new IllegalArgumentException("用户ID不能为空");
        }
        
        User user = userRepository.selectById(userId);
        if (user == null) {
            throw new IllegalArgumentException("用户不存在: " + userId);
        }
        
        return user;
    }

    @Override
    public boolean isAdmin(Long userId) {
        try {
            User user = getCurrentUser(userId);
            return UserRole.ADMIN.equals(user.getRole());
        } catch (Exception e) {
            log.warn("检查用户管理员权限失败: userId={}, error={}", userId, e.getMessage());
            return false;
        }
    }

    @Override
    public boolean canAccessTask(Long userId, Long taskUserId) {
        if (userId == null || taskUserId == null) {
            return false;
        }
        
        // 管理员可以访问所有任务
        if (isAdmin(userId)) {
            return true;
        }
        
        // 普通用户只能访问自己的任务
        return userId.equals(taskUserId);
    }

    @Override
    public Long getDataFilterUserId(Long userId) {
        if (userId == null) {
            return null;
        }
        
        // 如果是管理员，返回null（不过滤数据，可以查看所有用户的数据）
        if (isAdmin(userId)) {
            return null;
        }
        
        // 普通用户返回自己的用户ID（过滤为只能看到自己的数据）
        return userId;
    }
}